<!DOCTYPE html>
<html>
  <head>
    <title>DnA 持续集成</title>
    <meta charset="utf-8">
    <style>

      body { font-family: 'Droid Serif'; }
      h1, h2, h3 {
        font-family: 'Yanone Kaffeesatz';
        font-weight: normal;
      }
      .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
    </style>
  </head>
  <body>
    <textarea id="source">

class: center, middle

# DnA 持续集成

---

# 大纲

1. 实现持续集成
2. 持续集成的前提条件
3. 使用持续集成软件
4. 必不可少的实践
5. 推荐的实践
6. 分布式团队
7. 分布式版本控制系统

---

# 实现持续集成
准备工作

1. 版本控制
> 产品代码，测试代码，数据库脚本，构建与部署脚本，以及所有创建、安装、运行和测试该应用程序的东西
2. 自动化构建
> 通过命令自动执行应用的构建、测试以及部署过程
3. 团队共识
> “修复破坏应用程序的任意修改是最高优先级的任务”

---

# 实现持续集成
基本的持续集成系统，只要有版本控制工具就可以做持续集成，或使用开源工具例如Jenkins，TeamCity，Go，BuildForge等

1. 提交前查看是否有构建正在运行
2. 一旦构建成功完成，就更新版本代码
3. 本地构建并测试，成功则提交
4. 失败则立即修复
5. 开始下一项任务

---

# 持续集成的前提条件

1. 频繁提交
2. 自动化测试套件
3. 构建测试尽可能快
4. 管理开发工作区
  - 配置管理
  - 第三方依赖管理
  - 自动化测试能本地运行

---

# 使用持续集成软件

1. 基本操作
2. 铃声和口哨

---

# 必不可少的实践

1. 构建失败之后不要提交新代码
2. 提交前在本地运行测试
3. 测试通过后再继续工作
4. 回家前构建必须处于成功状态
5. 时刻准备回滚
6. 回滚前规定一个修复时间
7. 不要将失败的测试注释掉
8. 为自己导致的问题负责
9. 测试驱动开发

---

# 推荐的实践

1. 极限编程
2. 让构建失败
> 违背架构原则、运行变慢、编译警告、代码风格问题

---

# 分布式团队

1. 团队人员定期轮换
2. 集中式持续集成
3. 分布式版本控制

---

# 分布式版本控制系统

GitHub

---

# 总结

1. 开发模式上的转变
2. 快速反馈
3. 良好的配置管理
4. 团队纪律
5. 部署流水线

    </textarea>
    <script src="remark-latest.min.js">
    </script>
    <script>
      var slideshow = remark.create();
    </script>
  </body>
</html>
